package com.hotel.service.impl;

import com.hotel.component.IocContainer;
import com.hotel.dao.RoomTypeDao;
import com.hotel.entity.PageBean;
import com.hotel.entity.RoomType;
import com.hotel.exception.EntityException;
import com.hotel.service.RoomTypeService;
import com.hotel.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * @Author Str
 * @Date 2021/11/1 22:04
 * @Description :
 */
public class RoomTypeServiceImpl implements RoomTypeService {
    private RoomTypeDao roomTypeDao = (RoomTypeDao) IocContainer.getBean("RoomTypeDao");

    @Override
    public List<RoomType> getRoomTypes() throws SQLException {
        return roomTypeDao.getRoomTypes();
    }

    @Override
    public void save(RoomType roomType) throws Exception {
        //{ps}这里要同时处理两件事情 [新增 / 更新]
        //{1}获取数据库连接.
        Connection conn = JdbcUtils.getConnection();
        //{2}开启事务功能 [自动提交关闭]
        conn.setAutoCommit(false);
        try {
            //{3}如果 userID 为空 ----> 新增用户
            if (roomType.getId() == null) {
                //{b}创建一个 uuid [A87E....]
                String uuid = UUID.randomUUID().toString();
                //(原)"A87E-C5E6-.."  ----> (新)"A87EC5E6.."
                uuid = uuid.replace("-", "");
                //{b}设置给 user
                roomType.setId(uuid);
//                System.out.println("Service:::"+user);
                //{c}新增用户
                roomTypeDao.add(roomType);
            } else {    //不为空 ---> 更新用户
                roomTypeDao.update(roomType);
            }
            //{4}提交事务
            conn.commit();
        } finally {
            conn.close();
        }
    }

    @Override
    public RoomType getById(String id) throws SQLException, EntityException {
        return roomTypeDao.getById(id);
    }

    @Override
    public PageBean<RoomType> getList(Map<String, Object> map) throws SQLException {
        //{1}从 map 中获取 page, limit。
        Integer page = (Integer) map.get("page");
        Integer limit = (Integer) map.get("limit");
        //{2}查询结果记录偏移量
        int offset = (page - 1) * limit;
        //{3}再将它们从 map 中移除。
        map.remove("page");
        map.remove("limit");
        //{4}创建 PageBean
        PageBean<RoomType> pBean = new PageBean<>();
//        try{
        //{5}获取搜索关键字的 SQL 片段
        String schSQL = roomTypeDao.getSearchSQL(map);
        //{6}获取当前查询到的记录数。
        int count = roomTypeDao.getCount(schSQL);
        //{7}获取当前查询到的记录数据。
        List<RoomType> list = roomTypeDao.getList(schSQL, offset, limit);
        //{8}设置记录数
        pBean.setCount(count);
        //{9}设置 列表数据
        pBean.setList(list);
//        }finally{
//            //{ps}关闭连接。
//            JdbcUtils.closeConnection();
//        }
        return pBean;
    }

    @Override
    public void delete(String id) throws SQLException, EntityException {
        //{1}获取数据库连接.
        Connection conn = JdbcUtils.getConnection();
        //{2}开启事务功能 [自动提交关闭]
        conn.setAutoCommit(false);
        try {
            int ret = roomTypeDao.delete(id);
            if (ret != 1) {
                throw new EntityException("删除失败。");
            }
            //{4}提交事务
            conn.commit();
        } finally {
            conn.close();
        }
    }
}
